
import router from '../../router'
//全局使用的一些函数
export default {
  install(Vue) {
    //================ 用户校验相关
    // 去掉文字前后空格, 特殊字符
    Vue.prototype.formateText = function (value) {
      value = value.replace(/[`@#$^……|'\\[\]@#￥|【】]/g, '');
      return value;
    }
    Vue.prototype.formateCodeText = function (value) {
      return value.replace(/[\u4e00-\u9fa5/\s+/]|[#]/g, '');
    }
    //================ 工具相关
    //返回上一页
    Vue.prototype.backToPrevpage = function () {
      if (history.length > 1) {
        router.go(-1);
      } else {
        router.push({ path: '/index' });
      }
    };

    //美化价格的显示 num 待美化的价格 fixed 几位小数 round 四舍五入 thousand 千位符
    Vue.prototype.priceSexy = function (num, fixed = 2, round = true, thousand = false) {
      if (isNaN(num)) {
        return num;
      }
      if (fixed >= 0) {
        if (round) {
          num = (Number(num)).toFixed(fixed);
        } else {
          num = (Math.floor(num * 100) / 100).toFixed(fixed);
        }
      }
      if (thousand) {
        var numarr = num.split(".");
        if (numarr.length) {
          num = (numarr[0] || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,");
        }
        if (numarr.length > 1 && numarr[1] != "") {
          num = "" + num + "." + numarr[1];
        }
      }
      return num;
    };


    //格式化时间 时间戳、Date 都行
    Vue.prototype.dateformat = function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') {
      let nowDate = ""
      if (pattern = 'YYYY-MM-DD HH:mm:ss') {
        const conver = (s) => {
          return s < 10 ? '0' + s : s
        }
        const myDate = new Date(dataStr) // 获取当前年
        const year = myDate.getFullYear() // 获取当前月
        const month = myDate.getMonth() + 1 // 获取当前日
        const date = myDate.getDate()
        const h = myDate.getHours() // 获取当前小时数(0-23)
        const m = myDate.getMinutes() // 获取当前分钟数(0-59)
        const s = myDate.getSeconds()
        // 获取当前时间
        const now = year + '-' + conver(month) + '-' + conver(date) + ' ' + conver(h) + ':' + conver(m) + ':' + conver(s)
        return now
      } else if (pattern = 'YYYY-MM-DD') {
        let myDate = new Date(dataStr)
        let myYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
        let myMonth = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月)
        let myToday = myDate.getDate(); //获取当前日(1-31)
        myMonth = myMonth > 9 ? myMonth : '0' + myMonth
        myToday = myToday > 9 ? myToday : '0' + myToday
        return nowDate = myYear + "-" + myMonth + "-" + myToday
      }
    }

    //只能输入正整数的数字
    Vue.prototype.integer = function (val) {
      return /^[1-9]*$/.test(parseInt(val))
        ? String(parseInt(val)).replace('.', '')
        : ''
    }

    //只能输入正整数的数字
    // Vue.prototype.integer = function (val) {
    //   return /^[1-9]*$/.test(parseInt(val))
    //     ? String(parseInt(val)).replace('.', '')
    //     : ''
    // }
    //身高校验（70~250CM）
    Vue.prototype.checkHeight = function (height) {
      if (parseInt(height) > 250) {
        return false;
      } else if (parseInt(height) < 70) {
        return false;
      } else if (parseInt(height) === 0) {
        return false;
      } else {
        return true;
      }
    }

    //体重校验（12~200KG）
    Vue.prototype.checkWeight = function (Weight) {
      if (parseInt(Weight) > 200) {
        return false;
      } else if (parseInt(Weight) < 12) {
        return false;
      } else if (parseInt(Weight) === 0) {
        return false;
      } else {
        return true;
      }
    }

    //手机号校验
    Vue.prototype.checkPhone = function (phone) {
      let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
      return reg_tel.test(phone);
    }

    //邮箱校验
    Vue.prototype.checkEmail = function (email) {
      let reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
      return reg.test(email);
    }
    // 台湾居民来往大陆通行证
    Vue.prototype.isTWCard = function (card) {
      // 规则： 新版8位或18位数字， 旧版10位数字 + 英文字母
      // 样本： 12345678 或 1234567890B
      var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/;
      return reg.test(card);
    }
    // 港澳台居民来往内地通行证
    Vue.prototype.isHKCard = function (card) {
      // 规则： H/M + 10位或6位数字
      // 样本： H1234567890
      // var reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/;
      var reg = /^[0-9a-zA-Z]{1,18}$/;
      return reg.test(card);
    }
    // 校验护照
    Vue.prototype.checkPassPortCard = function (card) {
      // 护照
      // 规则： 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
      // 样本： 141234567, G12345678, P1234567
      var reg = /^([a-zA-z]|[0-9]){5,17}$/;
      return reg.test(card);
    }
    //身份证校验
    // 函数参数必须是字符串，因为二代身份证号码是十八位，而在javascript中，十八位的数值会超出计算范围，造成不精确的结果，导致最后两位和计算的值不一致，从而该函数出现错误。
    // 详情查看javascript的数值范围
    Vue.prototype.checkIDCard = function (idcode) {
      // 加权因子
      var weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
      // 校验码
      var check_code = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];

      var code = idcode + "";
      var last = idcode[17]; //最后一位

      var seventeen = code.substring(0, 17);

      // ISO 7064:1983.MOD 11-2
      // 判断最后一位校验码是否正确
      var arr = seventeen.split("");
      var len = arr.length;
      var num = 0;
      for (var i = 0; i < len; i++) {
        num = num + arr[i] * weight_factor[i];
      }

      // 获取余数
      var resisue = num % 11;
      var last_no = check_code[resisue];

      // 格式的正则
      // 正则思路
      /*
    第一位不可能是0
    第二位到第六位可以是0-9
    第七位到第十位是年份，所以七八位为19或者20
    十一位和十二位是月份，这两位是01-12之间的数值
    十三位和十四位是日期，是从01-31之间的数值
    十五，十六，十七都是数字0-9
    十八位可能是数字0-9，也可能是X
    */
      var idcard_patter =
        /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dX]$/;

      // 判断格式是否正确
      var format = idcard_patter.test(idcode);
      // 返回验证结果，校验码和格式同时正确才算是合法的身份证号码
      return last === last_no && format ? true : false;
    }
  }
}




